package com.company.genealogy.web.controller;

import com.company.genealogy.common.result.ApiResponse;
import com.company.genealogy.web.service.StatisticsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import com.company.genealogy.web.service.BranchService;
import com.company.genealogy.web.dto.BranchDTO;

import java.util.ArrayList;
import java.util.List;
import com.company.genealogy.common.constant.ApiCodeEnum;

/**
 * 数据统计控制器
 * 
 * 提供家族数据的各种统计功能，包括人口统计、世代分布、
 * 年龄分布、迁徙路线等数据分析功能。
 * 
 * 主要功能：
 * - 家族人口统计（按分支、世代）
 * - 世代分布统计
 * - 年龄分布统计
 * - 迁徙路线统计
 * - 地图标记数据
 * 
 * 统计维度：
 * - 按家族统计
 * - 按分支统计
 * - 按世代统计
 * - 按年龄统计
 * 
 * @author chenzhixiang
 * @version 1.0
 * @since 2024-01-01
 */
@RestController
@RequestMapping("/api/v1/statistics")
public class StatisticsController {
    
    /**
     * 统计服务接口
     */
    @Autowired
    private StatisticsService statisticsService;
    
    /**
     * 分支服务接口
     */
    @Autowired
    private BranchService branchService;
    
    /**
     * 获取家族人口统计
     * 
     * 统计指定家族的人口分布情况，包括各分支、各世代的人数统计。
     * 
     * @param clanId 家族ID
     * @return 人口统计数据
     */
    @GetMapping("/population")
    public ApiResponse<Map<String, Object>> getPopulationStatistics(@RequestParam Long clanId) {
        Map<String, Object> result = statisticsService.getBranchAndGenerationStats(clanId);
        return ApiResponse.success(ApiCodeEnum.SUCCESS, result);
    }
    
    /**
     * 获取世代分布统计
     * 
     * 统计家族中各世代的人数分布情况。
     * 
     * @param clanId 家族ID
     * @return 世代分布统计数据
     */
    @GetMapping("/generation")
    public ApiResponse<Map<String, Object>> getGenerationStatistics(@RequestParam Long clanId) {
        Map<String, Object> result = new HashMap<>();
        /**
         * 示例数据
         * 实际项目中应该从数据库查询真实的统计数据
         */
        result.put("generationStats", new HashMap<>());
        return ApiResponse.success(ApiCodeEnum.SUCCESS, result);
    }
    
    /**
     * 获取年龄分布统计
     * 
     * 统计家族成员的年龄分布情况。
     * 
     * @param clanId 家族ID
     * @return 年龄分布统计数据
     */
    @GetMapping("/age")
    public ApiResponse<Map<String, Object>> getAgeStatistics(@RequestParam Long clanId) {
        Map<String, Object> result = new HashMap<>();
        /**
         * 示例数据
         * 实际项目中应该从数据库查询真实的统计数据
         */
        result.put("ageStats", new HashMap<>());
        return ApiResponse.success(ApiCodeEnum.SUCCESS, result);
    }

    /**
     * 获取迁徙路线统计
     * 
     * 查询所有分支的迁徙路线和地图标记信息。
     * 用于在地图上展示家族的迁徙历史。
     * 
     * @param clanId 家族ID
     * @return 迁徙路线和地图标记数据
     */
    @GetMapping("/migration")
    public ApiResponse<Map<String, Object>> getMigrationRoutes(@RequestParam Long clanId) {
        /**
         * 查询所有分支的迁徙路线和地图标记
         * 获取家族下所有分支的基本信息和迁徙数据
         */
        List<BranchDTO> branches = branchService.getBranchListWithNames(1, Integer.MAX_VALUE, clanId).getRecords();
        List<Map<String, Object>> migrationList = new ArrayList<>();
        for (BranchDTO branch : branches) {
            Map<String, Object> item = new HashMap<>();
            item.put("branchId", branch.getId());
            item.put("branchName", branch.getName());
            item.put("migrationRoute", branch.getMigrationRoute());
            item.put("mapMarker", branch.getMapMarker());
            migrationList.add(item);
        }
        Map<String, Object> result = new HashMap<>();
        result.put("migrationList", migrationList);
        return ApiResponse.success(ApiCodeEnum.SUCCESS, result);
    }
} 